package ar.com.larreta.colegio.client.responsables;

import java.util.ArrayList;

import ar.com.larreta.colegio.intercambio.client.ListaDeResponsables;
import ar.com.larreta.colegio.intercambio.client.Responsable;
import ar.com.larreta.colegio.intercambio.client.ResponsableActualizado;
import ar.com.larreta.controlador.client.Invocador;
import ar.com.larreta.grilla.client.Grilla;
import ar.com.larreta.grilla.client.ventanas.BotonBorrarMensajesPresionado;
import ar.com.larreta.grilla.client.ventanas.RetornoDeLlamadaEnVentanaConGrilla;
import ar.com.larreta.grilla.client.ventanas.VentanaConGrilla;
import ar.com.larreta.intercambio.client.comunes.Dato;
import ar.com.larreta.intercambio.client.comunes.ListaDeTiposDeDocumentos;
import ar.com.larreta.vista.client.BarraHerramientas;
import ar.com.larreta.vista.client.CajaDeTexto;
import ar.com.larreta.vista.client.Constantes;
import ar.com.larreta.vista.client.Estado;
import ar.com.larreta.vista.client.ListaDesplegable;
import ar.com.larreta.vista.client.Mensajes;

import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;

public class VentanaResponsables extends VentanaConGrilla {

	public static final Integer ANCHO_VENTANA = 1350;
	public static final Integer ANCHO_IZQUIERDA = 350;
	public static final Integer ANCHO_CENTRO = 500;
	public static final Integer ANCHO_DERECHA = 500;
	public static final Integer LARGO_VENTANA = Constantes.LARGO_VENTANA_POR_DEFECTO * 6 / 5;
	
	public static final Integer LARGO_DATOS = 280;

	public static final Integer TAMANIO_TEXTO_MENSAJE = 200;
	
	private static final String LISTA = "listaResponsables";

	//Informacion del Responsable
	private CajaDeTexto nombre;
	private CajaDeTexto apellido;
	private ListaDesplegable tipoDocumento;
	private CajaDeTexto numeroDocumento;
	private CajaDeTexto cbu;
	
	private SectorAlumnos alumnosOrigen;
	private SectorAlumnos alumnosDestino;
	
	public SectorAlumnos getAlumnosOrigen() {
		return alumnosOrigen;
	}


	public SectorAlumnos getAlumnosDestino() {
		return alumnosDestino;
	}


	public VentanaResponsables() {
		
		super(Mensajes.getInstancia().get("msg.colegio.responsables.titulo"), null);
		
		this.setSize(ANCHO_VENTANA, LARGO_VENTANA);
		
		VerticalPanel barraYCampos = new VerticalPanel();
		add(barraYCampos);
		barraYCampos.setSize(ANCHO_VENTANA, LARGO_DATOS + 30);
		
		barraHerramientas = new BarraHerramientas(this, ANCHO_VENTANA, 25);
		barraYCampos.add(barraHerramientas);
		
		HorizontalPanel panelCamposEntrada = new HorizontalPanel();
		panelCamposEntrada.setSize(ANCHO_VENTANA, LARGO_DATOS);
		panelCamposEntrada.setHorizontalAlign(HorizontalAlignment.LEFT);
		barraYCampos.add(panelCamposEntrada);
		
		VerticalPanel izquierda = new VerticalPanel();
		VerticalPanel centro = new VerticalPanel();
		VerticalPanel derecha = new VerticalPanel();
		panelCamposEntrada.add(izquierda);
		panelCamposEntrada.add(centro);
		panelCamposEntrada.add(derecha);
		
		izquierda.setSize(ANCHO_IZQUIERDA, LARGO_DATOS);
		centro.setSize(ANCHO_CENTRO, LARGO_DATOS);
		derecha.setSize(ANCHO_DERECHA, LARGO_DATOS);
		
		
		FieldSet fieldSet = new FieldSet();
		
		fieldSet.setHeading(Mensajes.getInstancia().get("msg.colegio.responsables.detalle"));
		fieldSet.setSize((ANCHO_IZQUIERDA) - 15 , LARGO_DATOS);
		izquierda.add(fieldSet);
		
		nombre = new CajaDeTexto(Mensajes.getInstancia().get("msg.colegio.nombre"), null);
		nombre.getCampoTexto().setWidth(TAMANIO_TEXTO_MENSAJE);
		nombre.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(nombre.getCampoTexto());
		fieldSet.add(nombre.getHorizontal());

		apellido = new CajaDeTexto(Mensajes.getInstancia().get("msg.colegio.apellido"), null);
		apellido.getCampoTexto().setWidth(TAMANIO_TEXTO_MENSAJE);
		apellido.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(apellido.getCampoTexto());
		fieldSet.add(apellido.getHorizontal());

		tipoDocumento = new ListaDesplegable(Mensajes.getInstancia().get("msg.colegio.tipodocumento"), null, new ListaDeTiposDeDocumentos(), "listaTipoDocumentos");
		tipoDocumento.getCampoDesplegable().setWidth(TAMANIO_TEXTO_MENSAJE);
		tipoDocumento.getCampoDesplegable().setAllowBlank(Boolean.FALSE);
		registrarCampo(tipoDocumento.getCampoDesplegable());
		fieldSet.add(tipoDocumento.getHorizontal());

		numeroDocumento = new CajaDeTexto(Mensajes.getInstancia().get("msg.colegio.numerodocumento"), null);
		numeroDocumento.getCampoTexto().setWidth(TAMANIO_TEXTO_MENSAJE);
		numeroDocumento.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(numeroDocumento.getCampoTexto());
		fieldSet.add(numeroDocumento.getHorizontal());

		cbu = new CajaDeTexto(Mensajes.getInstancia().get("msg.colegio.cbu"), null);
		cbu.getCampoTexto().setWidth(TAMANIO_TEXTO_MENSAJE);
		cbu.getCampoTexto().setAllowBlank(Boolean.FALSE);
		registrarCampo(cbu.getCampoTexto());
		fieldSet.add(cbu.getHorizontal());
		
		alumnosDestino = new SectorAlumnos(this, Mensajes.getInstancia().get("msg.colegio.alumnosdestino"), Boolean.FALSE);
		centro.add(alumnosDestino);
		
		alumnosOrigen = new SectorAlumnos(this, Mensajes.getInstancia().get("msg.colegio.alumnosorigen"), Boolean.TRUE);
		derecha.add(alumnosOrigen);
		
		grilla = new Grilla(new ListaDeResponsables(), getConfiguracionColumnas(), LISTA);
		grilla.setSize(ANCHO_VENTANA - 15, LARGO_DATOS);
		
		grilla.addSelectionChangeListener(new CambioEnLaSeleccionGrillaResponsables(this));
		grilla.habilitarMenuContextual(new BotonBorrarMensajesPresionado(this));
		
		add(grilla);
		add(grilla.getToolBar());
		
		show();
	}
	
	
	public void confirmando(){
		if (esValido()) {
			Responsable responsable = null;
			if (estado.equals(Estado.CREACION)){
				responsable = new Responsable();
			} else {
				responsable = new ResponsableActualizado();
				responsable.setId(((Responsable)getGrilla().getSelectionModel().getSelectedItems().get(0)).getId());
			}
			responsable.setNombre((String) nombre.getCampoTexto().getValue());
			responsable.setApellido((String) apellido.getCampoTexto().getValue());
			responsable.setTipoDocumento((Dato)tipoDocumento.getCampoDesplegable().getValue());
			responsable.setNumeroDocumento((String)numeroDocumento.getCampoTexto().getValue());
			responsable.setCbu((String) cbu.getCampoTexto().getValue());
			
			responsable.setAlumnos(alumnosDestino.getGrilla().getDatos());
			
			Invocador.invocar(responsable, new RetornoDeLlamadaEnVentanaConGrilla(this));
		}
	}
	
	private ColumnModel getConfiguracionColumnas() {
		ColumnConfig columnNombre = new ColumnConfig("nombre", Mensajes.getInstancia().get("msg.colegio.nombre"), 125);
		ColumnConfig columnApellido = new ColumnConfig("apellido", Mensajes.getInstancia().get("msg.colegio.apellido"), 125);
		ColumnConfig columnTipoDocumento = new ColumnConfig("tipoDocumento", Mensajes.getInstancia().get("msg.colegio.tipodocumento"), 125);
		ColumnConfig columnNumeroDocumento = new ColumnConfig("numeroDocumento", Mensajes.getInstancia().get("msg.colegio.numerodocumento"), 125);
		ColumnConfig columnCbu = new ColumnConfig("cbu", Mensajes.getInstancia().get("msg.colegio.cbu"), 125);
		
		ArrayList<ColumnConfig> columnConfigs = new ArrayList<ColumnConfig>();
		columnConfigs.add(columnNombre);
		columnConfigs.add(columnApellido);
		columnConfigs.add(columnTipoDocumento);
		columnConfigs.add(columnNumeroDocumento);
		columnConfigs.add(columnCbu);		
		
		return new ColumnModel(columnConfigs);
	}
	
	@Override
	public void limpiar() {
		super.limpiar();
		alumnosOrigen.getGrilla().limpiar();
		alumnosOrigen.getGrilla().load();
		alumnosDestino.getGrilla().limpiar();
		alumnosDestino.getGrilla().load();

	}

	public Grilla getGrilla() {
		return grilla;
	}

	public CajaDeTexto getNombre() {
		return nombre;
	}


	public CajaDeTexto getApellido() {
		return apellido;
	}


	public ListaDesplegable getTipoDocumento() {
		return tipoDocumento;
	}


	public CajaDeTexto getNumeroDocumento() {
		return numeroDocumento;
	}


	public CajaDeTexto getCbu() {
		return cbu;
	}

}
